<?php
namespace core\models;
/**
 * 日志类
 * @package core\models
 * @author  ZhouHaoHua <53027327@qq.com>
 * @package
 */
class Log {
    private $logFile = '';
    private $logDir = '';

    /**
     * 日志记录
     * @param string $message      要记录的日志信息
     * @param string $__FUNCTION__ 当前方法名称。请传 __FUNCTION__ 过来即可。若手工指定了$file的地址，此参数可传空值。
     * @param string $file         要记录到哪个文件位置？【注意】默认不需要指定地址，默认文件目录在log/当前记录的文件方法地址。例如：
     *                             <pre>
     *                             在 models\Configuration.php的init方法中插入了一行日志\Z::Log('日志内容',__FUNCTION__);那么该日志的保存地址就在：log/models/Configuration/init.log这个文件中
     *                             </pre>
     * @throws Error
     */
    public function __construct($message, $__FUNCTION__, $file = '') {
        if (empty($__FUNCTION__) && empty($file)) {
            throw \Z::Error('$__FUNCTION__和$file不能同时为空！');
        }
        $array = debug_backtrace();
        //print_r($array);
        if (empty($file)) {
            $this->logFile = Z_LOG_DIR . (str_replace(Z_APP, '', $array[1]['file'])) . '/' . $__FUNCTION__ . '.log';
        }else{
            $this->logFile = $file;
        }
        $this->logDir  = dirname($this->logFile);
        // echo '日志文件：' . $this->logFile . PHP_EOL;
        // echo '日志目录：' . dirname($this->logFile) . PHP_EOL;
        if (!file_exists($this->logDir)) {
            mkdir($this->logDir, 0755, true);
        }
        $this->write($message);
        // $this->echoMessage($message);
    }

    /**
     * 写文件
     * @author ZhouHaoHua <53027327@qq.com>
     * @param $message
     * @return int
     */
    protected function write($message) {
        $message = date('Y-m-d H:i:s').' '.$message.PHP_EOL;
        return file_put_contents($this->logFile, $message, FILE_APPEND);
    }

    /**
     * 显示日志到屏幕
     * @author ZhouHaoHua <53027327@qq.com>
     * @param $message
     */
    protected function echoMessage($message){
        $message = date('Y-m-d H:i:s').' '.$message.'<br />';
        echo $message;
    }

    /**
     * 取得日志的默认存放目录地址
     * @author ZhouHaoHua <53027327@qq.com>
     * @return string
     */
    public function getDir(){
        return $this->logDir;
    }
}